#include "Motor.h"
#include "sys.h"

/**
 * 函    数：直流电机初始化
 * 参    数：无
 * 返 回 值：无
 */
void Motor_Init(void)
{
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void Limit(int16_t *motorA, int16_t *motorB)
{
	if (*motorA > PWM_MAX)
		*motorA = PWM_MAX;
	if (*motorA < PWM_MIN)
		*motorA = PWM_MIN;

	if (*motorB > PWM_MAX)
		*motorB = PWM_MAX;
	if (*motorB < PWM_MIN)
		*motorB = PWM_MIN;
}

int16_t GFP_abs(int16_t p)
{
	return p > 0 ? p : (-p);
}

void Load(int16_t motorA, int16_t motorB)
{
	motorA = motorA*100;
	motorB = motorB*100;
	OLED_ShowString(2, 1, "motorA:");
	OLED_ShowNum(2, 10, motorA, 6);
	OLED_ShowString(3, 1, "motorB:");
	OLED_ShowNum(3, 10, motorB, 6);
	if (motorA > 0)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_14);
		GPIO_ResetBits(GPIOB, GPIO_Pin_15);
	}
	else
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_15);
		GPIO_ResetBits(GPIOB, GPIO_Pin_14);
	}
	TIM_SetCompare1(TIM1, GFP_abs(motorA));

	if (motorB > 0)
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
		GPIO_ResetBits(GPIOB, GPIO_Pin_13);
	}
	else
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_13);
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
	}
	TIM_SetCompare4(TIM1, GFP_abs(motorB));
}
